<?php namespace Common\Model;
use Hdphp\Model\Model;
/**
 * 文章表模型
 */
class Article extends Model{
		//标签表
		protected $table = 'article';
		//自动验证(前提：表字段必须和表单一致)
		protected $validate = array(
				array('title','required','标题必须填写哦^_^',3,3),
				array('author','required','作者名称必须填写哦^_^',3,3),
				array('author','maxlen:10','作者名称不能超过10个字符哦^_^',3,3),
				array('category_cid','required','所属分类必须选择哦^_^',3,3)
		);
		//自动完成【表单无法处理的字段就选择使用自动完成来操作】
		protected $auto=array(
				array('sendtime','time','function',3,1),
				array('updatetime','time','function',3,2),
				array('user_uid','getUid','method',3,3),
				array('thumb','getImgPath','method',3,3),
				array('imgs','getImg','method',3,3)
		);
		
		//自动完成自[定义方法]
		public  function getUid(){
				return $_SESSION['uid'];
		}
		
		//上传缩略图
		public function getImgPath(){
				//判断编辑没有修改图片
				if ($thumb = Q('post.thumb')) {
						//直接返回隐藏域内的图片地址
						return $thumb;
				}
				//文件路径
				$imgDir = 'Upload/' . date('ymd');
				//上传图片
				$upload = Upload::path($imgDir)->type('jpg,png,gif')->size(2000000)->make('thumb');
				//上传成功
				if ($upload) {
						//组合缩略图路径
						$imgPath =  $imgDir . '/' . 'thumb_' . $upload['0']['basename'];
						//缩略图处理，进行缩略并保存起来
						$thumbPath = Image::thumb($upload['0']['path'],$imgPath,108,58,6);
						//删除原图
						unlink($upload['0']['path']);
						return $thumbPath;
				}
				return '';
		}
		
		//上传大图
		public function getImg(){
			//判断编辑没有修改图片
			if ($imgs = Q('post.imgs')) {
				//直接返回隐藏域内的图片地址
				return $imgs;
			}
			//文件路径
			$imgDir = 'Upload/' . date('ymd');
			//上传图片
			$upload = Upload::path($imgDir)->type('jpg,png,gif,jpeg')->size(2000000)->make('imgs');
			//上传成功
			if ($upload) {
				//组合缩略图路径
				$imgPath =  $imgDir . '/' . 'imgs_' . $upload['0']['basename'];
				//大图处理，进行缩略并保存起来
				$imgsPath = Image::thumb($upload['0']['path'],$imgPath,560,191,6);
				//删除原图
				unlink($upload['0']['path']);
				return $imgsPath;
			}
			return '';
		}
		
		//添加
		public function  store(){
				//实例化文件数据模型类
				$articleData= new \Common\Model\ArticleData();
				
				//必须验证都通过才开始添加数据到各个表中
				if (!$this->create()) return false;
				if (!$articleData->create()) {
						//把data模型的错误信息存入当前模型中,因为外部调用的是当前模型
						$this->error = $articleData->getError();
						return false;
				}
				//1.给acticle表添加数据
				//上传文件判断 4代表没有选择上传文件
				if ($_FILES) {
					//判断缩略图
					if ($_FILES['thumb']['error'] !=4) {
						if ($error = Upload::getError()) {
							//把上传的错误信息存入到Model的error属性中
							$this->error = $error;
							return false;
						}
					}
					//判断大图
					if ($_FILES['imgs']['error'] !=4) {
						if ($error = Upload::getError()) {
							//把上传的错误信息存入到Model的error属性中
							p($error);die;
							$this->error = $error;
							return false;
						}
					}
				}
				
				//上传成功后，返回自增ID
				$aid = $this->add();
				//2.给acticle_tag文章表和标签表的中间表插数据
				//实例化标签模型类
				$artTag = new \Common\Model\ArticleTag();
				$tidArray = Q('post.tid',array());
				//循环tid 依次插入数据
				foreach ($tidArray as $tid) {
					$data = array(
							'article_aid' => $aid,
							'tag_tid' => $tid
					);
					$artTag->add($data);
				}
				
				//3.给article_data文章数据表插入数据
				//把aid压入文章数据表中
				$articleData->data['article_aid'] = $aid;
				$articleData->add();
				return true;
		}
		
		//编辑
		public function edit($aid){
				//实例化文件数据模型类
				$articleData= new \Common\Model\ArticleData();
				
				//必须验证都通过才开始添加数据到各个表中
				if (!$this->create()) return false;
				if (!$articleData->create()) {
					//把data模型的错误信息存入当前模型中,因为外部调用的是当前模型
					$this->error = $articleData->getError();
					return false;
				}
				//上传文件判断 4代表没有选择上传文件
				if ($_FILES) {
					if (!Q('post.thumb')) {
						if ($_FILES['thumb']['error'] !=4) {
							if ($error = Upload::getError()) {
								//把上传的错误信息存入到Model的error属性中
								$this->error = $error;
								return false;
							}
						}
					}
					
					if (!Q('post.imgs')) {
						if ($_FILES['imgs']['error'] !=4) {
							if ($error = Upload::getError()) {
								//把上传的错误信息存入到Model的error属性中
								$this->error = $error;
								return false;
							}
						}
					}
					
				}
				
				//验证通过后,直接修改数据
				$this->save();
				//2.修改中间表数据【先删除在修改】
				//实例化标签模型类
				$artTag = new \Common\Model\ArticleTag();
				//删除
				$artTag->where(array('article_aid' => $aid))->delete();
				//添加
				$tidArray = Q('post.tid',array());
				//循环tid 依次插入数据
				foreach ($tidArray as $tid) {
					$data = array(
							'article_aid' => $aid,
							'tag_tid' => $tid
					);
					$artTag->add($data);
				}
				
				//3.给article_data文章数据表[修改数据]
				$articleData->where(array('article_aid'=>$aid))->save();
				return true;
		}
		
		//删除
		public function del($aid){
				$where = array('article_aid' =>$aid);
				//删除文章表的数据
				$this->delete($aid);
				//删除文章所有的标签
				(new \Common\Model\ArticleTag)->where($where)->delete();
				//删除文章数据表
				(new \Common\Model\ArticleData())->where($where)->delete();
		}
}
?>